The present invention relates to coordinating protocol stacks for computer systems or electronic devices. More particularly, the invention relates to dynamically loading and unloading of protocol stacks under signaling control.
Protocol stacks are the hierarchy of protocols that allow computers and devices to communicate over a network. These networking protocol stacks have traditionally been statically loaded. That is, once loaded into memory, the protocol stacks will typically remain loaded in memory until they are explicitly unloaded by a user. The static loading of protocol stacks can be acceptable in some environments, but there are an increasing number of environments and situations where the static loading of protocol stacks provides less than desirable results.
As a first example, smaller mobile devices such as cell phones and personal digital assistants (PDAs) are becoming more and more popular. Although including many of the same components as their larger, less mobile brethren, these mobile devices usually have fewer resources such as memory in which the protocol stacks are loaded. Additionally, the smaller mobile devices often need to run operating system vendor applications that use non-sharable protocol stacks while periodically needing to use that same stack for other purposes. Thus, statically loading of protocol stacks can be troublesome on devices, such as smaller mobile devices, that are resource limited.
In order to address this resource constraints problem, what is usually done is to limit the number or capability of the applications that are supported on the platform to a level that never exceeds the available memory when all the protocol stacks are loaded. In some cases, a more costly model of the device, which includes greater memory and possibly the applications to take advantage of this memory, may be introduced. In still other cases, the ability to add plug-in extra-cost memory to a mobility platform may be provided. The major disadvantage to these solutions is that at any given price point, the functionality that can be offered to customers is less than that which could be achieved if memory were used more efficiently.
Another situation where static loading of protocol stacks can result in less than desirable results is when one attempts to share non-sharable protocol stacks. Non-sharable protocol stacks are stacks that either cannot be loaded or used or are not designed to be loaded or used at the same time, typically by different applications. For example, a company's own application may use some of the same protocol stacks as Microsoft's NetMeeting. However, the protocol stacks in NetMeeting may not be designed to be shared in this manner. What is typically done to alleviate this problem of sharing non-sharable protocol stacks is that the users switch between applications by manually unloading the protocol stacks of one application and then loading the protocol stacks of the other application. Depending on the applications, the protocol stacks can be unloaded manually or automatically when the application is exited.
In theory, the problem of sharing non-sharable protocol stacks can also be solved by integrating into a single application all the needed functionality so there is no need to load a potentially conflicting application. The goal of providing all the needed functionality is difficult to achieve for single users and even harder for large groups that may want a very diverse set of utilities. Alternatively, one could only purchase applications that do not have protocol stack sharing restrictions. This may be impractical as it limits one's choices of applications and results in higher resource utilization such as memory. Finally, it is possible for the vendor to support truly shared use of its protocol stacks, both by its own graphical user interface (GUI) and by programmatic callers. However, most vendors, even the largest and most successful, usually do not invest the extra effort required to make this solution work.